Skip to content

HJ68 成绩排序 ​

本节目标:理解“HJ68 成绩排序”的核心思路,并能把它用于实际开发或面试表达。 较难 通过率:22.99% 时间限制:1秒 空间限制:32M 知识点==排序== 描述 给定一些同学的信息(名字,成绩)序列,请你将他们的信息按照成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter 96 jack 70 Tom 70 smith 67 从低到高 smith 67 jack 70 Tom 70 peter 96 注:0代表从高到低,1代表从低到高 数据范围:人数:1≤�≤200 1≤n≤200 进阶:时间复杂度:�(�����) O(nlogn) ,空间复杂度:�(�) O(n) 输入描述: 第一行输入要排序的人的个数n,第二行输入一个整数表示排序的方式,之后n行分别输入他们的名字和成绩,以一个空格隔开 输出描述: 按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开 示例1 输入: 30fang 90yang 50ning 70 ==复制== 输出: fang 90ning 70yang 50 ==复制== 示例2 输入: 31fang 90yang 50ning 70 ==复制== ==输出:== ==yang 50========ning 70========fang 90======

为了实现这个排序功能,我们需要根据用户的选择来决定是按成绩从高到低还是从低到高排序。Python 的列表排序方法(sort 方法或 sorted 函数)可以方便地实现这一功能。我们可以利用这些方法的 key 参数来指定排序的依据(在这里是成绩),以及 reverse 参数来控制排序的方向。

下面是一种可能的实现方式:

def sort_students(n, sort_order, students):

对学生信息进行排序 ​

sort_order为0时,按成绩降序排列;为1时,按成绩升序排列 ​

students.sort(key=lambda x: x[1], reverse=(sort_order == 0))

输出排序后的学生信息 ​

for student in students: print(student[0], student[1])

读取输入 ​

n = int(input()) # 学生人数 sort_order = int(input()) # 排序方式:0为降序,1为升序 students = [] for _ in range(n): name, score = input().split() students.append((name, int(score)))

调用函数进行排序并输出结果 ​

sort_students(n, sort_order, students)

这个程序首先读取学生人数n和排序方式sort_order,然后读取每个学生的名字和成绩,存储在一个列表students中,每个学生的信息是一个元组,包含名字和成绩。之后,调用sort_students函数对学生进行排序并输出。

在sort_students函数中,使用列表的sort方法对学生信息进行排序,key=lambda x: x[1]指定以成绩作为排序的依据,reverse=(sort_order == 0)根据用户选择的排序方式确定排序方向。

这样,程序就能根据用户的输入,输出按照指定方式排序后的学生信息了。

while True: try: count = int(input()) isAsc = int(input()) == 1 pairs = [] for _ in range(count): # 使用for循环正确读取指定行数的输入 name, score = input().split() # 分别读取名字和成绩 pairs.append([name, int(score)]) # 确保成绩是整数形式

使用sorted函数和reverse参数来根据成绩升序或降序排序 ​

newlist = sorted(pairs, key=lambda x: x[1], reverse=not isAsc) for i in newlist: print(f"{i[0]} {i[1]}") except EOFError: break

本站总访问 — 次